Wang Haihua
🍈 🍉🍊 🍋 🍌
Python中我们常用Numpy库进行数组生成和函数运算. 我们可以通过在命令行提示符cmd(对于Windows系统)或者终端Terminal(对于Mac系统)使用下述命令安装Numpy:
pip install numpy
如果已经是使用Anaconda作为编程集成环境,那电脑中已经装好该库了,无需再次安装。
一般我们在使用该库时会将该库简写为np
import numpy as np
array
¶Numpy的基本数据类型为array
,类似于Python的数据结构list
但要比list
强大。
array
¶可以通过列表生成array
>>>np.array([1,2,3])
array(1,2,3)
也可以生成多维数组
>>>np.array([[1,2,3],[4,5,6]]) # 生成2行3列数组
array([[1, 2, 3],
[4, 5, 6]])
linspace
arange
¶可以通过指定元素个数生成等差数列
>>>np.linspace(1,10,5) # 生成起点为首项为1,末项为10,共5项的等差数列
array([ 1. , 3.25, 5.5 , 7.75, 10. ])
也可以指定公差生成等差数列
>>>np.arange(1,10,2) # 生成首项为1,公比为2,末项小于10的等差数列
array([1, 3, 5, 7, 9])
>>>a = np.array([[1,2,3],[4,5,6]])
>>>a.shape # 查看数组形状
(2,3)
>>>a.size # 查看数组元素个数
6
还可以对数组进行变形,比如对上述数组可以变成3行2列
>>>a.reshape((3,2)) # 查看数组形状
array([[1, 2],
[3, 4],
[5, 6]])
>>>a = np.array([[1,2,3],[4,5,6]])
>>>a[1,2] # 提取a第2行第3列元素
6
>>>a[:,2] # 提取a第3列元素,:代表'所有'
array([3, 6])
>>>a[:,[1,2]] # 提取a第2、3列元素
array([[2, 3],
[5, 6]])
>>>a = np.array([[1,2,3],[4,5,6]])
>>>a[a>2] # 提取a中大于2的数据
array([3, 4, 5, 6])
>>>a[(a>2)&(a<6)] # 提取a中大于2且小于6的数据
array([3, 4, 5])
Numpy中的通用函数ufuncs
很强大,相比于Python自带的math
库中的函数,往往可以同时处理数组和列表中的所有元素,举例来说
>>>import math
>>>import numpy as np
>>>math.log(20) # 求20的自然对数
2.995732273553991
>>>np.log(20)
2.995732273553991
>>>math.log([1,2,3]) # 报错,无法同时对1,2,3求对数
TypeError Traceback (most recent call last)
<ipython-input-17-2d751dc5cabe> in <module>
----> 1 math.log([1,2,3])
TypeError: must be real number, not list
>>>np.log([1,2,3])
array([0. , 0.69314718, 1.09861229])
以上仅是距离,常用函数在Numpy中基本都可以找到。
Numpy中有linalg
模块专门处理矩阵的相关运算。
>>>np.eye(3) # 生成单位矩阵
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>>np.diag([1,2,3,4]) # 生成对角矩阵
array([[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]])
>>>np.zeros((3,4)) #生成3行4列的全0矩阵
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
>>>A = np.array([[1,3,2],[4,1,5],[3,3,1]]) # 生成3行3列矩阵
array([[1, 3, 2],
[4, 1, 5],
[3, 3, 1]])
>>>B = np.array([[3,3,1],[5,2,6],[1,2,3]]) # 生成3行3列矩阵
array([[3, 3, 1],
[5, 2, 6],
[1, 2, 3]])
>>>A+B # 矩阵加法
array([[ 4, 6, 3],
[ 9, 3, 11],
[ 4, 5, 4]])
>>>A-B # 矩阵减法
array([[-2, 0, 1],
[-1, -1, -1],
[ 2, 1, -2]])
>>>A@B # 矩阵乘法,注意不是*
array([[20, 13, 25],
[22, 24, 25],
[25, 17, 24]])
>>>np.linalg.inv(A) # 矩阵A的逆
array([[-0.37837838, 0.08108108, 0.35135135],
[ 0.2972973 , -0.13513514, 0.08108108],
[ 0.24324324, 0.16216216, -0.2972973 ]])
>>>np.linalg.det(A) # A的行列式
37.000000000000014
>>>values,vectors = np.linalg.eig(A) # A的特征值与特征向量
>>>values # 特征值
array([ 7.59286438, -1.66349894, -2.92936543])
>>>vectors # 特征向量
array([[-0.47899104, -0.80079204, 0.50689474],
[-0.69615171, 0.4402157 , -0.82670395],
[-0.53473393, 0.40613082, 0.2441686 ]])
import numpy as np
np.array([1,2,3])
array([1, 2, 3])
np.linspace(1,10,5)
array([ 1. , 3.25, 5.5 , 7.75, 10. ])
np.arange(1,10,2)
array([1, 3, 5, 7, 9])
np.array([[1,2,3],[4,5,6]])
array([[1, 2, 3], [4, 5, 6]])
a = np.array([[1,2,3],[4,5,6]])
a.reshape((3,2))
array([[1, 2], [3, 4], [5, 6]])
a[:,2]
array([3, 6])
a[:,[1,2]]
array([[2, 3], [5, 6]])
a[a>2]
array([3, 4, 5, 6])
a[(a>2)&(a<6)]
array([3, 4, 5])
import math
math.log(20)
2.995732273553991
math.log([1,2,3])
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-17-2d751dc5cabe> in <module> ----> 1 math.log([1,2,3]) TypeError: must be real number, not list
np.log([1,2,3])
array([0. , 0.69314718, 1.09861229])
np.eye(3)
array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
np.diag([1,2,3,4])
array([[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 4]])
np.zeros((3,4))
array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])
A=np.array([[1,3,2],[4,1,5],[3,3,1]])
B=np.array([[3,3,1],[5,2,6],[1,2,3]])
A+B
array([[ 4, 6, 3], [ 9, 3, 11], [ 4, 5, 4]])
A-B
array([[-2, 0, 1], [-1, -1, -1], [ 2, 1, -2]])
A@B
array([[20, 13, 25], [22, 24, 25], [25, 17, 24]])
np.linalg.inv(A)
array([[-0.37837838, 0.08108108, 0.35135135], [ 0.2972973 , -0.13513514, 0.08108108], [ 0.24324324, 0.16216216, -0.2972973 ]])
np.linalg.det(A)
37.000000000000014
values,vectors = np.linalg.eig(A)
values
array([ 7.59286438, -1.66349894, -2.92936543])
vectors
array([[-0.47899104, -0.80079204, 0.50689474], [-0.69615171, 0.4402157 , -0.82670395], [-0.53473393, 0.40613082, 0.2441686 ]])